[C] Qsort - Ordenação
Publicado por Enzo de Brito Ferber (última atualização em 09/10/2010)
[ Hits: 6.263 ]
Homepage: http://www.maximasonorizacao.com.br
Programa simples para mostrar uma das funções de ordenação da biblioteca padrão. Bem legalzinho, bom pra não perder tempo escrevendo sua própria função se você pode usar algo mais generalizado.
/* qsort.c */ /* Enzo Ferber : <enzo@veloxmail.com.br> * * Quick Sort Routine Example * sep 2010 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> /* compare function for quick sort */ int compare ( const void *va, const void *vb ) { int *a = (int *) va; int *b = (int *) vb; return (*a > *b) ? 1 : ( *a == *b ) ? 0 : -1 ; } int *buildarray ( void ) { /* information */ int *p, i = 1, n; p = ( int * ) malloc ( 2 * sizeof ( int )); if ( !p ) { perror ( "[*] malloc" ); return NULL; } while ( 1 ) { printf ( "Value[%3d]: ", i ); __fpurge ( stdin ); scanf ( "%d", &n ); /* first element will be the number of elements on the array * this will be used by qsort() */ if ( n < 0 ) { /* first element */ *p = i - 1; return p; } else *(p + i) = n; /* alloc memory for the next item */ p = ( int * ) realloc ( p, (i + 2) * sizeof(int)); if ( !p ) { perror ( "[*] realloc" ); return NULL; } /* increment */ ++i; } return p; } int main ( void ) { int *a = buildarray(); int *p, n, i; n = *(a + 0); p = a + 1; /* Explanation: * * 'a' after buildarray return is: * * 'a'pos: 0 1 2 3 n * [number_of_elements][data][data1][data2][dataN].... * * Value: n x x x x * * So, 'n' is the number of elements in the array, and 'x' * is the data entered by the user. Pretty easy huh? * * So now, we do: * * p = a[1] * n = a[0] * Therefore, * * p[0] = a[1]; * n = n; (local_n) = (n_in_number_of_elements) * * P now is an array with only data entered by the user */ /* now we organize the array in ascending order */ printf ( "Sorting...\n" ); qsort ( (void *)p, n, sizeof(int), compare ); printf ( "Array: " ); for ( i = 0; i < n; i++ ) printf ( "%d ", p[i] ); printf ( "\n" ); /* free() the memory */ free ( a ); /* return to SO */ return 0; }
Um parser para tratar opções passadas para um programa em C
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (3)
É cada coisa que me aparece! - não é só 3% (3)
Melhorando a precisão de valores flutuantes em python[AJUDA] (5)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta